Python Worksheetsで開発した処理をそのままStored Procedureにしてみた #SnowflakeDB
さがらです。
先日パブリックプレビューとなったPython Worksheetsですが、開発した処理をそのままStored Procedureにできることを知ったので、本記事で試してみます。
やること
こちらのQuickstartの内容を用いて、Stored ProcedureをPython Worksheetsから作ってみます。
環境構築
今回使用するQuickstartでは、2. Get Startedにある、Setup Lab Environment
というボタンを押すと、このQuickstartに必要なウェアハウスなどをすぐに作成してくれます!
※事前にトライアルアカウントの作成が必要です。こちらから申請ください。
まず、2. Get Startedにある、Setup Lab Environment
というボタンを押します。
サインインするアカウントを選択し、ログインします。
下図の画面になったら、右側のSetup Lab
ボタンを押します。
ポップアップが表示されるので、Start Setup
を押します。
すると、10秒前後で環境構築が終わり、新しいワークシートが作られます。この作られたワークシートを用いて、Stored Procedureの作成を行ってみます。
ワークシートの内容を確認してみる
作成されたワークシートを開くと、下図のようにコメントががっつりと書かれたPythonの処理が表示されると思います。
ざっくりPythonの処理の内容としては、campaign_spend
という広告クリックデータをまとめたテーブルとmonthly_revenue
という10年間の収益データをまとめたテーブルをDataFrameとしてロードし、集計や結合などの加工を行い、spend_and_revenue_per_month
というテーブルとして出力する、ということを行っております。
ワークシート上で右上のRun
を押すと、結果欄に加工後のデータであるspend_and_revenue_per_month
の内容が表示されます。
これらの処理の内容は、Quickstartの3. Load Data from Snowflake Tables into Snowpark DataFrames~6. View and Return Transformed Dataで解説されていますので、ぜひこちらも併せてご覧ください!
Stored ProcedureとしてDeployしてみる
ということで、本題のPython Worksheetsで開発した処理をStored Procedureとしてデプロイすることを行ってみます。
画面右上のDeploy
を押します。
すると、下図のようなポップアップが表示されるため、Procedure name
を入れて、右下のDeploy
を押します。
無事に作られると、下図のように表示されます!このGo to procedure details
を押すと、実際に作られたStored Procedureの詳細画面に移動します。
タスクとして呼び出してみる
あとはおまけですが、Stored Procedureなのでタスクとして呼び出すことも可能です!
下記のようにcreate task
文を記述して実行することで、作成したStored Procedureを呼び出すタスクが作成可能です。
create task python_stored_test_task schedule = 'using cron 0 8 1 * * UTC' -- 毎月1日8:00(UTC)で実行と仮定 warehouse = 'snowpark_demo_wh' -- PythonのStored Procedureはサーバーレスタスクを使用できないため注意 as call CAMPAIGN_SPEND_MONTHLY_REVENUE_DATA_PIPELINE(); alter task python_stored_test_task resume; -- タスクの実行にはresumeが必要 show tasks;
このタスクを、下記のコマンドで手動実行します。これで、無事にPython Worksheetsで開発した処理が実行されて、テーブルが作られました!
execute task python_stored_test_task;
最後に
Python Worksheetsで開発した処理をそのままStored Procedureにすることを試してみました。
今回は簡単なデータ処理の例ですが、こちらの記事のSnowparkを用いた機械学習の例のように、モデルの学習を行うタスク、学習したモデルを用いた予測を行うタスク、のようにSnowpark for Pythonの処理は分けた上で繰り返して行うことが多いと思います。
こういったときに、Python Worksheetsで各処理を開発してStored Procedureにし、タスクとして定期実行していくということは非常に有用だと思います!